<!DOCTYPE html>
<html lang="en-us">
  <head>

    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    
<meta charset="UTF-8">
<title>Restoring from a Snapshot | Elasticsearch: The Definitive Guide [2.x] | Elastic</title>
<link rel="home" href="index.html" title="Elasticsearch: The Definitive Guide [2.x]">
<link rel="up" href="post_deploy.html" title="Post-Deployment">
<link rel="prev" href="backing-up-your-cluster.html" title="Backing Up Your Cluster">
<link rel="next" href="_clusters_are_living_breathing_creatures.html" title="Clusters Are Living, Breathing Creatures">
<meta name="DC.type" content="Learn/Docs/Legacy/Elasticsearch/Definitive Guide/2.x">
<meta name="DC.subject" content="Elasticsearch">
<meta name="DC.identifier" content="2.x">
<meta name="robots" content="noindex,nofollow">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="https://cdn.optimizely.com/js/18132920325.js"></script>
    <link rel="apple-touch-icon" sizes="57x57" href="/apple-icon-57x57.png">
    <link rel="apple-touch-icon" sizes="60x60" href="/apple-icon-60x60.png">
    <link rel="apple-touch-icon" sizes="72x72" href="/apple-icon-72x72.png">
    <link rel="apple-touch-icon" sizes="76x76" href="/apple-icon-76x76.png">
    <link rel="apple-touch-icon" sizes="114x114" href="/apple-icon-114x114.png">
    <link rel="apple-touch-icon" sizes="120x120" href="/apple-icon-120x120.png">
    <link rel="apple-touch-icon" sizes="144x144" href="/apple-icon-144x144.png">
    <link rel="apple-touch-icon" sizes="152x152" href="/apple-icon-152x152.png">
    <link rel="apple-touch-icon" sizes="180x180" href="/apple-icon-180x180.png">
    <link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32">
    <link rel="icon" type="image/png" href="/android-chrome-192x192.png" sizes="192x192">
    <link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96">
    <link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16">
    <link rel="manifest" href="/manifest.json">
    <meta name="apple-mobile-web-app-title" content="Elastic">
    <meta name="application-name" content="Elastic">
    <meta name="msapplication-TileColor" content="#ffffff">
    <meta name="msapplication-TileImage" content="/mstile-144x144.png">
    <meta name="theme-color" content="#ffffff">
    <meta name="naver-site-verification" content="936882c1853b701b3cef3721758d80535413dbfd">
    <meta name="yandex-verification" content="d8a47e95d0972434">
    <meta name="localized" content="true">
    <meta name="st:robots" content="follow,index">
    <meta property="og:image" content="https://www.elastic.co/static/images/elastic-logo-200.png">
    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
    <link rel="icon" href="/favicon.ico" type="image/x-icon">
    <link rel="apple-touch-icon-precomposed" sizes="64x64" href="/favicon_64x64_16bit.png">
    <link rel="apple-touch-icon-precomposed" sizes="32x32" href="/favicon_32x32.png">
    <link rel="apple-touch-icon-precomposed" sizes="16x16" href="/favicon_16x16.png">
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
    <link rel="stylesheet" type="text/css" href="/guide/static/styles.css">
  </head>

  <!--© 2015-2021 Elasticsearch B.V. Copying, publishing and/or distributing without written permission is strictly prohibited.-->

  <body>
    <!-- Google Tag Manager -->
    <script>dataLayer = [];</script><noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-58RLH5" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
    <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-58RLH5');</script>
    <!-- End Google Tag Manager -->

    <!-- Global site tag (gtag.js) - Google Analytics -->
    <script async src="https://www.googletagmanager.com/gtag/js?id=UA-12395217-16"></script>
    <script>
      window.dataLayer = window.dataLayer || [];
      function gtag(){dataLayer.push(arguments);}
      gtag('js', new Date());
      gtag('config', 'UA-12395217-16');
    </script>

    <!--BEGIN QUALTRICS WEBSITE FEEDBACK SNIPPET-->
    <script type="text/javascript">
      (function(){var g=function(e,h,f,g){
      this.get=function(a){for(var a=a+"=",c=document.cookie.split(";"),b=0,e=c.length;b<e;b++){for(var d=c[b];" "==d.charAt(0);)d=d.substring(1,d.length);if(0==d.indexOf(a))return d.substring(a.length,d.length)}return null};
      this.set=function(a,c){var b="",b=new Date;b.setTime(b.getTime()+6048E5);b="; expires="+b.toGMTString();document.cookie=a+"="+c+b+"; path=/; "};
      this.check=function(){var a=this.get(f);if(a)a=a.split(":");else if(100!=e)"v"==h&&(e=Math.random()>=e/100?0:100),a=[h,e,0],this.set(f,a.join(":"));else return!0;var c=a[1];if(100==c)return!0;switch(a[0]){case "v":return!1;case "r":return c=a[2]%Math.floor(100/c),a[2]++,this.set(f,a.join(":")),!c}return!0};
      this.go=function(){if(this.check()){var a=document.createElement("script");a.type="text/javascript";a.src=g;document.body&&document.body.appendChild(a)}};
      this.start=function(){var a=this;window.addEventListener?window.addEventListener("load",function(){a.go()},!1):window.attachEvent&&window.attachEvent("onload",function(){a.go()})}};
      try{(new g(100,"r","QSI_S_ZN_emkP0oSe9Qrn7kF","https://znemkp0ose9qrn7kf-elastic.siteintercept.qualtrics.com/WRSiteInterceptEngine/?Q_ZID=ZN_emkP0oSe9Qrn7kF")).start()}catch(i){}})();
    </script><div id="ZN_emkP0oSe9Qrn7kF"><!--DO NOT REMOVE-CONTENTS PLACED HERE--></div>
    <!--END WEBSITE FEEDBACK SNIPPET-->

    <div id="elastic-nav" style="display:none;"></div>
    <script src="https://www.elastic.co/elastic-nav.js"></script>

    <!-- Subnav -->
    <div>
      <div>
        <div class="tertiary-nav d-none d-md-block">
          <div class="container">
            <div class="p-t-b-15 d-flex justify-content-between nav-container">
              <div class="breadcrum-wrapper"><span><a href="/guide/" style="font-size: 14px; font-weight: 600; color: #000;">Docs</a></span></div>
            </div>
          </div>
        </div>
      </div>
    </div>

    <div class="main-container">
      <section id="content">
        <div class="content-wrapper">

          <section id="guide" lang="en">
            <div class="container">
              <div class="row">
                <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                  <!-- start body -->
                  <div class="page_header">
<p>
  <strong>WARNING</strong>: The 2.x versions of Elasticsearch have passed their
  <a href="https://www.elastic.co/support/eol">EOL dates</a>. If you are running
  a 2.x version, we strongly advise you to upgrade.
</p>
<p>
  This documentation is no longer maintained and may be removed. For the latest
  information, see the <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html">current
  Elasticsearch documentation</a>.
</p>
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch: The Definitive Guide [2.x]</a></span>
»
<span class="breadcrumb-link"><a href="administration.html">Administration, Monitoring, and Deployment</a></span>
»
<span class="breadcrumb-link"><a href="post_deploy.html">Post-Deployment</a></span>
»
<span class="breadcrumb-node">Restoring from a Snapshot</span>
</div>
<div class="navheader">
<span class="prev">
<a href="backing-up-your-cluster.html">« Backing Up Your Cluster</a>
</span>
<span class="next">
<a href="_clusters_are_living_breathing_creatures.html">Clusters Are Living, Breathing Creatures »</a>
</span>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="_restoring_from_a_snapshot"></a>Restoring from a Snapshot<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch-definitive-guide/edit/2.x/520_Post_Deployment/60_restore.asciidoc">edit</a>
</h2>
</div></div></div>
<p>Once you’ve backed up some data, restoring it is easy: simply add <code class="literal">_restore</code>
to the ID of the snapshot you wish to restore into your cluster:</p>
<div class="pre_wrapper lang-js">
<pre class="programlisting prettyprint lang-js">POST _snapshot/my_backup/snapshot_1/_restore</pre>
</div>
<p>The default behavior is to restore all indices that exist in that snapshot.
If <code class="literal">snapshot_1</code> contains five indices, all five will be restored into
our cluster.  As with the <code class="literal">snapshot</code> API, it is possible to select which indices
we want to restore.</p>
<p>There are also additional options for renaming indices.  This allows you to
match index names with a pattern, and then provide a new name during the restore process.
This is useful if you want to restore old data to verify its contents, or perform
some other processing, without replacing existing data.  Let’s restore
a single index from the snapshot and provide a replacement name:</p>
<div class="pre_wrapper lang-js">
<pre class="programlisting prettyprint lang-js">POST /_snapshot/my_backup/snapshot_1/_restore
{
    "indices": "index_1", <a id="CO313-1"></a><i class="conum" data-value="1"></i>
    "rename_pattern": "index_(.+)", <a id="CO313-2"></a><i class="conum" data-value="2"></i>
    "rename_replacement": "restored_index_$1" <a id="CO313-3"></a><i class="conum" data-value="3"></i>
}</pre>
</div>
<div class="calloutlist">
<table border="0" summary="Callout list">
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO313-1"><i class="conum" data-value="1"></i></a></p>
</td>
<td align="left" valign="top">
<p>Restore only the <code class="literal">index_1</code> index, ignoring the rest that are present in the
snapshot.</p>
</td>
</tr>
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO313-2"><i class="conum" data-value="2"></i></a></p>
</td>
<td align="left" valign="top">
<p>Find any indices being restored that match the provided pattern.</p>
</td>
</tr>
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO313-3"><i class="conum" data-value="3"></i></a></p>
</td>
<td align="left" valign="top">
<p>Then rename them with the replacement pattern.</p>
</td>
</tr>
</table>
</div>
<p>This will restore <code class="literal">index_1</code> into your cluster, but rename it to <code class="literal">restored_index_1</code>.</p>
<div class="tip admon">
<div class="icon"></div>
<div class="admon_content">
<p>Similar to snapshotting, the <code class="literal">restore</code> command will return immediately, and the
restoration process will happen in the background.  If you would prefer your HTTP
call to block until the restore is finished, simply add the <code class="literal">wait_for_completion</code>
flag:</p>
<div class="pre_wrapper lang-js">
<pre class="programlisting prettyprint lang-js">POST _snapshot/my_backup/snapshot_1/_restore?wait_for_completion=true</pre>
</div>
</div>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="_monitoring_restore_operations"></a>Monitoring Restore Operations<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch-definitive-guide/edit/2.x/520_Post_Deployment/60_restore.asciidoc">edit</a>
</h3>
</div></div></div>
<p>The restoration of data from a repository piggybacks on the existing recovery
mechanisms already in place in Elasticsearch.  Internally, recovering shards
from a repository is identical to recovering from another node.</p>
<p>If you wish to monitor the progress of a restore, you can use the <code class="literal">recovery</code>
API.  This is a general-purpose API that shows the status of shards moving around
your cluster.</p>
<p>The API can be invoked for the specific indices that you are recovering:</p>
<div class="pre_wrapper lang-js">
<pre class="programlisting prettyprint lang-js">GET restored_index_3/_recovery</pre>
</div>
<p>Or for all indices in your cluster, which may include other shards moving around,
unrelated to your restore process:</p>
<div class="pre_wrapper lang-js">
<pre class="programlisting prettyprint lang-js">GET /_recovery/</pre>
</div>
<p>The output will look similar to this (and note, it can become very verbose
depending on the activity of your cluster!):</p>
<div class="pre_wrapper lang-js">
<pre class="programlisting prettyprint lang-js">{
  "restored_index_3" : {
    "shards" : [ {
      "id" : 0,
      "type" : "snapshot", <a id="CO314-1"></a><i class="conum" data-value="1"></i>
      "stage" : "index",
      "primary" : true,
      "start_time" : "2014-02-24T12:15:59.716",
      "stop_time" : 0,
      "total_time_in_millis" : 175576,
      "source" : { <a id="CO314-2"></a><i class="conum" data-value="2"></i>
        "repository" : "my_backup",
        "snapshot" : "snapshot_3",
        "index" : "restored_index_3"
      },
      "target" : {
        "id" : "ryqJ5lO5S4-lSFbGntkEkg",
        "hostname" : "my.fqdn",
        "ip" : "10.0.1.7",
        "name" : "my_es_node"
      },
      "index" : {
        "files" : {
          "total" : 73,
          "reused" : 0,
          "recovered" : 69,
          "percent" : "94.5%" <a id="CO314-3"></a><i class="conum" data-value="3"></i>
        },
        "bytes" : {
          "total" : 79063092,
          "reused" : 0,
          "recovered" : 68891939,
          "percent" : "87.1%"
        },
        "total_time_in_millis" : 0
      },
      "translog" : {
        "recovered" : 0,
        "total_time_in_millis" : 0
      },
      "start" : {
        "check_index_time" : 0,
        "total_time_in_millis" : 0
      }
    } ]
  }
}</pre>
</div>
<div class="calloutlist">
<table border="0" summary="Callout list">
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO314-1"><i class="conum" data-value="1"></i></a></p>
</td>
<td align="left" valign="top">
<p>The <code class="literal">type</code> field tells you the nature of the recovery; this shard is being
recovered from a snapshot.</p>
</td>
</tr>
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO314-2"><i class="conum" data-value="2"></i></a></p>
</td>
<td align="left" valign="top">
<p>The <code class="literal">source</code> hash describes the particular snapshot and repository that is
being recovered from.</p>
</td>
</tr>
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO314-3"><i class="conum" data-value="3"></i></a></p>
</td>
<td align="left" valign="top">
<p>The <code class="literal">percent</code> field gives you an idea about the status of the recovery.
This particular shard has recovered 94% of the files so far; it is almost complete.</p>
</td>
</tr>
</table>
</div>
<p>The output will list all indices currently undergoing a recovery, and then
list all shards in each of those indices.  Each shard will have stats
about start/stop time, duration, recover percentage, bytes transferred, and more.</p>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="_canceling_a_restore"></a>Canceling a Restore<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch-definitive-guide/edit/2.x/520_Post_Deployment/60_restore.asciidoc">edit</a>
</h3>
</div></div></div>
<p>To cancel a restore, you need to delete the indices being restored.  Because
a restore process is really just shard recovery, issuing a <code class="literal">delete-index</code> API
alters the cluster state, which will in turn halt recovery.  For example:</p>
<div class="pre_wrapper lang-js">
<pre class="programlisting prettyprint lang-js">DELETE /restored_index_3</pre>
</div>
<p>If <code class="literal">restored_index_3</code> was actively being restored, this delete command would
halt the restoration as well as deleting any data that had already been restored
into the cluster.</p>
</div>

</div>
<div class="navfooter">
<span class="prev">
<a href="backing-up-your-cluster.html">« Backing Up Your Cluster</a>
</span>
<span class="next">
<a href="_clusters_are_living_breathing_creatures.html">Clusters Are Living, Breathing Creatures »</a>
</span>
</div>
</div>

                  <!-- end body -->
                </div>
                <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                  <div id="rtpcontainer" style="display: block;">
                    <div class="mktg-promo">
                      <h3>Most Popular</h3>
                      <ul class="icons">
                        <li class="icon-elasticsearch-white"><a href="https://www.elastic.co/webinars/getting-started-elasticsearch?baymax=default&amp;elektra=docs&amp;storm=top-video">Get Started with Elasticsearch: Video</a></li>
                        <li class="icon-kibana-white"><a href="https://www.elastic.co/webinars/getting-started-kibana?baymax=default&amp;elektra=docs&amp;storm=top-video">Intro to Kibana: Video</a></li>
                        <li class="icon-logstash-white"><a href="https://www.elastic.co/webinars/introduction-elk-stack?baymax=default&amp;elektra=docs&amp;storm=top-video">ELK for Logs &amp; Metrics: Video</a></li>
                      </ul>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </section>

        </div>


<div id="elastic-footer"></div>
<script src="https://www.elastic.co/elastic-footer.js"></script>
<!-- Footer Section end-->

      </section>
    </div>

<script src="/guide/static/jquery.js"></script>
<script type="text/javascript" src="/guide/static/docs.js"></script>
<script type="text/javascript">
  window.initial_state = {}</script>
  </body>
</html>
